package cn.tedu.csmall.business.rabbit;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

// 当前类配置RabbitMQ中交换机,路由Key和队列的关系
// 交换机和队列是实际对象,而路由Key只是绑定关系,他们都需要保存到Spring容器中来管理
@Configuration
public class RabbitMQConfig {
    // 需要将使用到的交换机\路由Key\队列的名称使用常量定义出来
    public static final String BUSINESS_EX="business_ex";
    public static final String BUSINESS_ROUT="business_rout";
    public static final String BUSINESS_QUEUE="business_queue";

    // 先声明交换机对象,保存到Spring容器
    // 根据实际需求保存交换机的数量
    @Bean
    public DirectExchange stockDirectExchange(){
        return new DirectExchange(BUSINESS_EX);
    }
    // 再声明队列对象,保存到Spring容器
    @Bean
    public Queue stockQueue(){
        return new Queue(BUSINESS_QUEUE);
    }
    // 最后声明路由Key,注意路由Key是一种关系对象,不会单独将对象保存到Spring容器中
    // 主要是关联哪个交换机绑定了哪个队列
    @Bean
    public Binding stockBinding(){
        return BindingBuilder.bind(
                stockQueue()).to(stockDirectExchange()).with(BUSINESS_ROUT);
    }
}
